#pragma once

#include <unistd.h>
#include <sys/syscall.h>

namespace CurrentThread
{
    /* 
    __thread: GCC编译器的扩展关键字 用于定义线程局部存储变量
    t_cachedTid 是一个线程局部缓存的线程TID变量
    意味着每个线程都有这个变量的独立副本 互不干扰
    */
    extern __thread int t_cachedTid;

    void cacheTid();

    inline int tid()
    {
        /*
        __builtin_expect(t_cachedTid==0, 0):GCC 提供的编译器优化指令 用于告诉编译器分支预测的概率:
        第一个参数 t_cachedTid==0 是判断条件
        第二个参数 0 表示该条件为 “假” 的概率更高 (即 t_cachedTid 通常已经缓存了 TID 不需要执行 cacheTid())

        如果 t_cachedTid 未初始化(为0) 则调用cacheTid()获取并缓存TID 否则直接返回缓存的TID
        */
        if(__builtin_expect(t_cachedTid==0,0))
        {
            cacheTid();
        }
        return t_cachedTid;
    }
}